#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    int fd;
    if ((fp = fopen("hello.txt", "r+")) == NULL) //以读写方式打开流，若没有hello.txt文件，则创建它，从文件开头开始读写
    {
        printf("fail to open!\n");
        exit(1);
    }
    fprintf(fp, "Hello! I like Linux C program!\n"); //向该流输出一段信息，这段信息会保存到打开的文件上
    fclose(fp);                                      //操作完毕，关闭流
    if ((fd = open("hello.txt", O_RDWR)) == -1)      //以读写的方式打开开文件——基于文件描述符的方式
    {
        printf("fail to open!\n");
        exit(1);
    }
    if ((fp = fdopen(fd, "a+")) == NULL) //在打开的文件上打开一个流，并从文件尾开始读写
    {
        printf("fail to open stream!\n");
        exit(1);
    }
    fprintf(fp, "I am doing Linux C program!\n"); //向该流输出一段信息，这段信息会保存到打开的文件上
    fprintf(fp, "This me!\n");
    fclose(fp); //关闭流，文件也被关闭
    return 0;
}

// r+是从头开始写，a+是后面追加
//第一次执行结果是
//      Hello! I like Linux C program!
//      I am doing Linux C program!
//第二次执行的结果是
//      Hello! I like Linux C program!
//      I am doing Linux C program!
//      I am doing Linux C program!
//原因是：从头开始写会覆盖原本位置的内容，而后面追加的不会覆盖。该结果分析仅用于该测试用例
